package com.struggle.rabbitmqconsumer.config;

import com.struggle.common.ExchangeConstants;
import com.struggle.common.QueueConstants;
import com.struggle.common.RoutingConstants;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @className DirectRabbitConfig
 * @Description 路由模式交换机配置
 * @Author liuwj3
 * @Date 2019/10/12 0012 上午 9:51
 **/
@Configuration
public class DirectRabbitConfig {
    @Bean
    DirectExchange getDirectExchange() {
        return new DirectExchange(ExchangeConstants.DIRECT_EXCHANGE);
    }

    @Bean
    public Queue getDirectQueue() {
        /**
         * true 是否持久化
         * 持久化：将交换机或队列的数据保存到磁盘，服务器宕机或重启之后依然存在。
         * 非持久化：将交换机或队列的数据保存到内存，服务器宕机或重启之后将不存在
         * 非持久化的性能高于持久化
         */
        return new Queue(QueueConstants.DIRECT_QUEUE, true);
    }

    @Bean
    public Queue getDirectQueue2() {
        /**
         * true 是否持久化
         * 持久化：将交换机或队列的数据保存到磁盘，服务器宕机或重启之后依然存在。
         * 非持久化：将交换机或队列的数据保存到内存，服务器宕机或重启之后将不存在
         * 非持久化的性能高于持久化
         */
        return new Queue(QueueConstants.DIRECT_QUEUE2, true);
    }

    /**
     * 队列绑定到交换机上，并设置匹配键：DIRECT_ROUTE_KEY
     *
     * @return
     */
    @Bean
    Binding bindingDirect() {
        return BindingBuilder.bind(getDirectQueue()).to(getDirectExchange()).with(RoutingConstants.DIRECT_ROUTE_KEY);
    }

    /**
     * 队列绑定到交换机上，并设置匹配键：DIRECT_ROUTE_KEY2
     *
     * @return
     */
    @Bean
    Binding bindingDirect2() {
        return BindingBuilder.bind(getDirectQueue2()).to(getDirectExchange()).with(RoutingConstants.DIRECT_ROUTE_KEY2);
    }
}
